package com.da.javatest.interview.session2;

/**
 * @author chenlida
 * @date 2020/3/28 23:10
 */
public class Test03DCL {
    private static volatile Test03DCL INSTANCE = null;

    public Test03DCL() {
        System.out.println("init test03 success!");
    }

    /**
     * 防止指令重排：
     * 1.分配内存空间
     * 2.初始化对象
     * 3.设置对象指向刚分配的内存地址，这时候INSTANCE != null
     *
     * 由于2，3步没有数据依赖性，并发情况下会导致指令重排
     */
    public static Test03DCL getInstance() {
        if (INSTANCE == null) {
            synchronized (Test03DCL.class) {
                if (INSTANCE == null) {
                    INSTANCE = new Test03DCL();
                }
            }
        }
        return INSTANCE;
    }
}
